package exception02;

/*
手动处理异常
  我们可以通过throw关键字抛出一个异常对象
    格式：throw new 异常类的构造方法
    注意事项：
        一旦执行throw new 异常类的构造方法；语句，该语句下面的代码都不在执行
        throw new 异常类的构造方法下面不能有任何语句马，因为永远执行不到
 */
public class ExceptionDemo02 {
    public static void main(String[] args) {
        int[] arr = new int[3];
    /*    int i = method(arr, 2);
        System.out.println(i); //0*/

        int i = method(null, 1);
        System.out.println(i);

        int j = method(arr, 5);
        System.out.println(j);

    }

    public static int method(int[] arr, int index) {
        //如果传null
        /*
        当arr==null的时候，return -1 会产生歧异
        1.定义method()方法的人认为如果arr为null，无法从数组中取元素，因此返回-1
        2.使用method()方法的人认为如果arr为null，结果返回 -1 认为数组中1索引位置元素值为 -1
        return 后面无论写任何值，都不能避免这个歧义
        throw 后面抛出的异常类，只能是异常体系的一员
         */
        if (arr == null) {
            //return -1;
            throw new NullPointerException("arr的值不能为null");
            //throw new String("abc");
        }
        if (!(index > 0 && index <= arr.length - 1)) {//索引错误的范围
            throw new ArrayIndexOutOfBoundsException(index + "这个索引超出数组索引范围");
            //int i=3;   //异常就停止执行代码，永远执行不到这句代码
        }
        return arr[index];
    }

}
